/***
@licence
***/

package jp.ize.iwp;

// {{{ imports

#if flash9
import flash.display.Sprite;
import flash.display.Stage;
#else
import flash.MovieClip;
import jp.ize.iwp.avm1.display.Sprite;
import jp.ize.iwp.avm1.display.Stage;
#end

// }}}
/**
* RuntimeEngine クラスです。<br />
* UX-Framework, MU-Frameworkを利用するために
* 最初に RuntimeEngine.init() を呼んでおく必要があります。
* また、DebugUtil クラスを利用する場合にも使います。
*/
class RuntimeEngine extends Sprite
{
	// {{{ properties

	/** シングルトン実装のインスタンスです。 */
	public static var base:RuntimeEngine;

	#if flash9
	#elseif flash
	/** Flash の Stage オブジェクトです。 */
	public static var stage:Stage;
	#end

	// }}}
	// {{{ public function new() : Void
	/**
	* コンストラクタ
	*/
	public function new() : Void
	{
		super();
	}

	// }}}
	#if flash9
	// {{{ public static function init() : Void
	/**
	* 初期化用メソッド
	* 他のすべての処理よりも先に呼ばれる必要があります。
	*/
	public static function init() : Void
	{
		base = new RuntimeEngine();
		try {
			flash.Lib.current.stage.addChild(base);
		} catch ( e:Dynamic ) {
			throw e;
		}
	}

	// }}}
	// {{{ public static function getStage() : Stage
	/**
	* Flash の Stage オブジェクトを取得します。
	*/
	public static function getStage() : Stage
	{
		return base.stage;
	}

	// }}}
	#else
	// {{{ public static function init() : Void
	/**
	* 初期化用メソッド
	* 他のすべての処理よりも先に呼ばれる必要があります。
	*/
	public static function init() : Void
	{
		haxe.Log.setColor(0xFFFFFF);
		var root = flash.Lib.current._root;
		base = new RuntimeEngine();
		base.mouseEnabled = false;
		stage = new Stage();
		stage.mouseEnabled = false;
		stage.setParent( root );
	}

	// }}}
	// {{{ public static function getStage() : Stage
	/**
	* Flash の Stage オブジェクトを取得します。
	*/
	public static function getStage() : Stage
	{
		return stage;
	}

	// }}}
	#end
}
